#!/usr/bin/env python3
"""
简单高亮器
为不支持的文件类型提供基本语法高亮
匹配数字、引号内容、方括号、尖括号、HTTP链接、井号后的内容
"""

from PyQt5.QtCore import QRegExp
from PyQt5.QtGui import QSyntaxHighlighter, QTextCharFormat, QColor, QFont


class SimpleHighlighter(QSyntaxHighlighter):
    """简单高亮器类"""
    
    def __init__(self, document):
        super().__init__(document)
        self.setup_rules()
    
    def setup_rules(self):
        """设置高亮规则"""
        self.highlighting_rules = []
        
        # 数字格式
        number_format = QTextCharFormat()
        number_format.setForeground(QColor(255, 255, 0))  # 黄色
        number_format.setFontWeight(QFont.Bold)
        self.highlighting_rules.append((QRegExp(r'\b\d+\b'), number_format))
        
        # 双引号内容格式（支持英文和中文双引号）
        double_quote_format = QTextCharFormat()
        double_quote_format.setForeground(QColor(0, 255, 0))  # 绿色
        # 英文双引号
        self.highlighting_rules.append((QRegExp(r'"[^"]*"'), double_quote_format))
        # 中文双引号
        self.highlighting_rules.append((QRegExp(r'"[^“”]*"'), double_quote_format))
        
        # 单引号内容格式（支持英文和中文单引号）
        single_quote_format = QTextCharFormat()
        single_quote_format.setForeground(QColor(0, 255, 20))  # 绿色
        # 英文单引号
        self.highlighting_rules.append((QRegExp(r"'[^']*'"), single_quote_format))
        # 中文单引号
        self.highlighting_rules.append((QRegExp(r"'[^‘’]*'"), single_quote_format))
        
        # 方括号格式
        bracket_format = QTextCharFormat()
        bracket_format.setForeground(QColor(128, 0, 128))  # 紫色
        bracket_format.setFontWeight(QFont.Bold)
        self.highlighting_rules.append((QRegExp(r'\[[^\]]*\]'), bracket_format))
        
        # 尖括号格式
        angle_bracket_format = QTextCharFormat()
        angle_bracket_format.setForeground(QColor(128, 0, 128))  # 紫色
        angle_bracket_format.setFontWeight(QFont.Bold)
        self.highlighting_rules.append((QRegExp(r'<[^>]*>'), angle_bracket_format))
        
        # HTTP链接格式
        http_format = QTextCharFormat()
        http_format.setForeground(QColor(0, 0, 255))  # 蓝色
        http_format.setFontUnderline(True)
        self.highlighting_rules.append((QRegExp(r'https?://[^\s]+'), http_format))
        
        # 井号后的内容格式（注释）
        comment_format = QTextCharFormat()
        comment_format.setForeground(QColor(128, 128, 128))  # 灰色
        comment_format.setFontItalic(True)
        self.highlighting_rules.append((QRegExp(r'#[^\n]*'), comment_format))
        
        # 分号格式
        semicolon_format = QTextCharFormat()
        semicolon_format.setForeground(QColor(205, 105, 30))  # 棕色
        semicolon_format.setFontWeight(QFont.Bold)
        self.highlighting_rules.append((QRegExp(r'[；;]'), semicolon_format))
        
        # 冒号格式
        colon_format = QTextCharFormat()
        colon_format.setForeground(QColor(0, 255, 0))  # 绿色
        colon_format.setFontWeight(QFont.Bold)
        self.highlighting_rules.append((QRegExp(r'[:：]'), colon_format))
    
    def highlightBlock(self, text):
        """高亮文本块"""
        for pattern, format in self.highlighting_rules:
            expression = QRegExp(pattern)
            index = expression.indexIn(text)
            while index >= 0:
                length = expression.matchedLength()
                self.setFormat(index, length, format)
                index = expression.indexIn(text, index + length)


if __name__ == "__main__":
    # 测试代码
    print("简单高亮器已创建")
    print("支持的高亮元素:")
    print("  • 数字: 123, 456")
    print("  • 双引号内容: \"hello world\"")
    print("  • 单引号内容: 'hello world'")
    print("  • 方括号: [item1, item2]")
    print("  • 尖括号: <tag>content</tag>")
    print("  • HTTP链接: https://example.com")
    print("  • 井号注释: # 这是一个注释")